/**
 * * 过滤对象中的空值（null、undefined、空字符串、NaN）
 * @param obj 需要过滤的对象
 * @returns 过滤后的对象
 */
export function filterEmptyValues<T extends object>(obj: T): Partial<T> {
  return Object.fromEntries(
    Object.entries(obj).filter(([_, value]) => {
      return (
        value !== null &&
        value !== undefined &&
        value !== "" &&
        !Number.isNaN(value)
      );
    })
  ) as any;
}

/**
 * * 将对象转换为 query 字符串
 * @param obj 需要转换的对象
 * @param noFilterEmpty 是否保留空值，默认 false（去除空值）
 * @returns 转换后的查询字符串
 */
export function objToQuery(
  obj: Record<string, any>,
  noFilterEmpty: boolean = false
): string {
  if (!obj || typeof obj !== "object") {
    return "";
  }

  // 如果需要过滤空值
  const filteredObj = noFilterEmpty ? obj : filterEmptyValues(obj);

  return Object.entries(filteredObj)
    .map(([key, value]) => {
      return `${key}=${value}`;
    })
    .join("&");
}